#ifndef __LLIST_H__
#define __LLIST_H__

// 数据结点
struct node_st {
	struct node_st *prev, *next;
	char data[0];
};

// 头结点
typedef struct {
	struct node_st head;
	int size;
}llist_t;

typedef int (*cmp_t)(const void *data, const void *key);
typedef void (*pri_t)(const void *data);

int llisthead_init(llist_t **mylist, int size);

int llist_empty(const llist_t *mylist);

int llist_insert(llist_t *mylist, const void *data);

int llist_insert_tail(llist_t *mylist, const void *data);

int llist_delete(llist_t *mylist, const void *key, cmp_t cmp);


int llist_fetch(llist_t *mylist, const void *key, cmp_t cmp, void *data);

void llist_traval(const llist_t *mylist, pri_t pri);

void llist_destroy(llist_t **mylist);

int llist_have_cycle(const llist_t *mylist);

#endif


